package HASH_TABLE

func setZeroes(matrix [][]int) {
	row := make([]bool, len(matrix))
	col := make([]bool, len(matrix[0]))

	for i, r := range matrix {
		for j, v := range r {
			if v == 0 {
				row[i] = true
				col[j] = true
			}
		}
	}
	for i, r := range matrix {
		for j := range r {
			if row[i] || col[j] {
				r[j] = 0
			}
		}
	}
}

//// setZeroes 实现矩阵置零操作：若矩阵中某个元素为0，则将其所在行和列的所有元素都置为0
//// 参数 matrix 是一个二维整数切片，函数会直接修改原矩阵（原地操作）
//func setZeroes(matrix [][]int) {
//	// 获取矩阵的行数 m（矩阵的长度即行数）
//	m := len(matrix)
//	// 若矩阵为空，直接返回（避免后续访问matrix[0]报错）
//	if m == 0 {
//		return
//	}
//	// 获取矩阵的列数 n（第一行的长度即列数，假设矩阵为非空且每行长度相同）
//	n := len(matrix[0])
//
//	// 创建行标记数组：row[i] 为 true 表示第i行需要被置零
//	row := make([]bool, m)
//	// 创建列标记数组：col[j] 为 true 表示第j列需要被置零
//	col := make([]bool, n)
//
//	// 第一遍遍历：标记需要置零的行和列
//	// i 是行索引（0到m-1），r 是当前行的元素切片
//	for i, r := range matrix {
//		// j 是列索引（0到n-1），v 是当前单元格的元素值
//		for j, v := range r {
//			// 若当前元素为0，标记其所在行和列需要置零
//			if v == 0 {
//				row[i] = true  // 第i行需要置零
//				col[j] = true  // 第j列需要置零
//			}
//		}
//	}
//
//	// 第二遍遍历：根据标记数组，将对应行和列的元素置零
//	for i, r := range matrix {
//		for j := range r {  // 遍历当前行的每一列
//			// 若当前行需要置零，或当前列需要置零，则将该单元格置为0
//			if row[i] || col[j] {
//				r[j] = 0
//			}
//		}
//	}
//}
